package zhongbo.java.air.monitor.service;

import zhongbo.java.air.common.vo.PageVo;
import zhongbo.java.air.monitor.model.FlightActivityDaily;

import java.util.List;

/**
 * 说明：
 *
 * @author 钟波dellNotebook
 * @since 2025年04月08日 星期二 04:05:30
 */
public interface IFlightActivityDailyService<T extends FlightActivityDaily> {

    // 增删改查,和支持指定字段排序的分页功能

    /**
     * 添加
     *
     * @param entity 实体信息
     * @return 添加结果
     */
    T add(T entity);

    /**
     * 删除
     *
     * @param entityId entityId
     * @return 删除结果
     */
    String delete(String entityId);

    /**
     * 修改
     *
     * @param edit 修改实体
     * @return 结果
     */
    T edit(T edit);

    /**
     * 查询一条
     *
     * @param entityId 查询 entityId
     * @return 结果
     */
    T findOne(String entityId);

    /**
     * 分页查询用户列表
     * 如果传了entityName, 使用entityName进行模糊查找
     *
     * @param page        分页页码
     * @param pageSize    分页大小
     * @param icao        icao编码
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @param keyword     模糊搜索关键字
     * @param fields      要模糊搜索的字段(多个用英文逗号","隔开)
     * @param oderByField 按某个字段排序
     * @param orderByAsc  是否正序排序(默认倒序)
     * @return 结果
     */
    PageVo<T> findPage(Integer page, Integer pageSize
            , String icao, String startTime, String endTime
            , String keyword, String fields, String oderByField, Boolean orderByAsc);

    /**
     * 查询当天航迹活动结果
     *
     * @param date 某一天的日期 2025-04-08
     * @return 当天航迹活动结果
     */
    List<T> selectDailyStats(String date);

    /**
     * 从数据库查询当天航迹活动结果
     *
     * @param date 某一天的日期 2025-04-08
     * @return 当天航迹活动结果
     */
    List<T> getDailyStats(String date);

    /**
     * 根据 icao 和 date 查询活动飞机
     *
     * @param icao icao编码
     * @param date 某一天的日期 2025-04-08
     * @return 指定的活动飞机
     */
    FlightActivityDaily findOneByIcaoAndDate(String icao, String date);

    /**
     * 更新补充飞机信息registration,airline,aircraft_type三个字段
     *
     * @param entity 实体信息
     */
    void fillDictForAirCraftInfo(T entity);
}
